#include <iostream>
#include <vector>

using namespace std;

void reverseString(vector<char>& s) {
    int left{}, right{ static_cast<int>(s.size()) - 1 };
    while (left < right) {
        // 使用库函数进行交换
        // swap(s[left], s[right]);

        // 容易理解的交换数值的方法
        // char temp = s[left];
        // s[left] = s[right];
        // s[right] = temp;

        // 使用异或运算来进行交换
        s[left] ^= s[right]; // 构造 a ^ b 的结果，并放在 a 中
        s[right] ^= s[left]; // 将 a ^ b 这一结果再 ^ b ，存入b中，此时 b = a, a = a ^ b
        s[left] ^= s[right]; // a ^ b 的结果再 ^ a ，存入 a 中，此时 b = a, a = b 完成交换

        left++;
        right--;
    }

    // for 循环来进行遍历
    // for (int i{}, j { static_cast<int>(s.size()) - 1 }; i < s.size() / 2; i++, j--) {
    //     swap(s[i], s[j]);
    // }
}

void printS(vector<char>& s) {
    for (int i {}, len { static_cast<int>(s.size()) }; i < len; i++) {
        cout << s[i] << " ";
    }
    cout << "\n";
}

int main() {
    vector<char> s { 'h','e','l','l','o' };
    cout << "origin: ";
    printS(s);
    reverseString(s);
    cout << "after: ";
    printS(s);

    return 0;
}